package com.itlong.cloud.propertyapp.dao;

import com.itlong.cloud.POJO.PO.PropertyAppDeviceGroupInfoPO;
import com.itlong.cloud.POJO.VO.app.property.PropertyAppGetUserDevicesListVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <desc>
 *      物业APP设备信息数据访问接口
 * </desc>
 *
 * @createDate 2020/01/13
 */
@Mapper
@Repository
public interface IPropertyAppDeviceDao {

    /**
     * <desc>
     *      查询用户在指定项目下的设备分组情况
     * <desc/>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020-01-13
     */
    List<PropertyAppDeviceGroupInfoPO> getPropertyAppUserGroupInfo(@Param("userId") String userId,@Param("projectId") String projectId,@Param("groupListByMake") List<String> groupListByMake);

    /**
     * <desc>
     *      查询用户在指定项目下的设备情况
     * <desc/>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020-01-13
     */
    String getPropertyAppUserDeviceInfo(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      查询指定项目下所有物业操作员、管理员、集团管理员的排序字段
     * <desc/>
     *
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020-04-20
     */
    List<Map<String,Object>> getPropertyAppUserDeviceOrderInfo(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据deviceUnique查询电梯楼层权限标识及楼层名称
     * <desc/>
     *
     * @param deviceUnique 设备编号
     * @param floorNo 起始楼层
     * @param floorNoMax 结束楼层
     * @return
     * @author Juguang.S
     * @createDate 2020-01-13
     */
    Map<String,String> getElevatorFloorInfo(@Param("deviceUnique") String deviceUnique,
                                            @Param("floorNo") String floorNo,
                                            @Param("floorNoMax") String floorNoMax);

    /**
     * <desc>
     *      根据设备序列号查询是否绑定控制器
     * </desc>
     *
     * @param device 电梯唯一码
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020-01-13
     */
    Map<String,Object> getControllerDeviceUniqueByElevatorDeviceUniques(@Param("device") String device,
                                                                        @Param("projectId") String projectId);

    /**
     * <desc>
     *      获取物业app用户的所有设备信息
     * <desc/>
     *
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020-01-14
     */
    List<PropertyAppGetUserDevicesListVO> getPropertyAppUserAllDeviceInfo(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据设备唯一码查询灵云注册的设备账号
     * <desc/>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2020-01-14
     */
    String getDeviceAccount(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据分组ID查询设备分组相关信息
     * <desc/>
     *
     * @param groupId 分组ID
     * @return
     * @author Juguang.S
     * @createDate 2020-01-14
     */
    Map<String,String> getGroupInfo(@Param("groupId") String groupId);

    /**
     * <desc>
     *      根据userId及projectId 获取常用楼层
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2020/01/15
     */
    String getCommonFloorByUserIdAndProjectId(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      更新property_role_project
     * </desc>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @param qrCode 二维码
     * @param qrCodeEndTime 二维码生效过期时间
     * @param deviceUniques 设备排序
     * @return
     * @Author Juguang.S
     * @createDate  2020/01/03
     */
    Integer updatePropertyRoleProject(@Param("userId") String userId,
                                      @Param("projectId") String projectId,
                                      @Param("qrCode") String qrCode,
                                      @Param("qrCodeEndTime") String qrCodeEndTime,
                                      @Param("deviceUniques") String deviceUniques);

    /**
     * <desc>
     *      获取排序后的电梯
     * </desc>
     *
     * @param floorSet
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate  2020/04/21
     */
    Map<String,Object> getOrderFloors(@Param("floorSet") Set<String> floorSet, @Param("deviceUnique") String deviceUnique);
}
